-
2022-01-29 18:07:15
任务描述
本关任务:接收给定的字符串,判断是否为对称字符串。 对称字符串举例:abcdcba。
import java.util.Scanner; public class StrTest { public static void main(String[] args) { // 请在Begin-End间编写代码 /********** Begin **********/ // 第一步:接收给定的字符串 Scanner input = new Scanner(System.in); String str = input.next(); // 第二步:创建StringBuffer对象反转字符串 StringBuffer strBf = new StringBuffer(str); String str1 = strBf.reverse().toString(); // 第三步:判断反转后的字符串与原字符串是否相等 if (str.equals(str1)){ System.out.println(str + "是对称字符串"); }else { System.out.println(str + "不是对称字符串"); } /********** End **********/ } }
更多相关内容 -
对称字符串
2015-03-25 20:45:43int main() { char * example=new char[100]; cin >> example; cout(example); return 0; } -
判断一个字符串是否是对称字符串,例如"abc"不是对称字符串,"aba"、"abba"、"aaa"、"mnanm"是对称字符串
2021-03-04 09:33:07判断一个字符串是否是对称字符串,例如"abc"不是对称字符串,"aba"、"abba"、"aaa"、"mnanm"是对称字符串package yang.base;import java.util.ArrayList;import java.util.Arrays;import java.util.Collections;...判断一个字符串是否是对称字符串,例如"abc"不是对称字符串,"aba"、"abba"、"aaa"、"mnanm"是对称字符串
package yang.base;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Scanner;
/**
*判断一个字符串是否是对称字符串,
*例如"abc"不是对称字符串,"aba"、"abba"、"aaa"、"mnanm"是对称字符串
*分析:
*键盘录入数据
*把字符数据转换成高效字符
*使用高效中的翻转功能对数据进行翻转,在转换成字符串数据存储
*使用equals方法进行两个数据比较
*如果是,输出是对称数据,否则输出不是
*
*
*
*/
public class Test48 {
public static void main(String[] args) {
//键盘录入数据
Scanner s = new Scanner(System.in);
while(true){
String y=s.nextLine();
//使用高效中的翻转功能对数据进行翻转,在转换成字符串数据存储
StringBuffer sb = new StringBuffer(y);
String y1 = sb.reverse().toString();
//使用equals方法进行两个数据比较
// 如果是,输出是对称数据,否则输出不是
if(y1.equals(y)){
System.out.println("是对称字符");
}else{
System.out.println("不是对称字符");
}
System.out.println("结束请输入end");
if(y.equals("end")){
break;
}
}
}
}
-
判断一个字符串是否是对称字符串 例如“abc“不是对称字符串,“aba“、“abba“、“aaa“、“mnanm“是...
2022-01-22 18:53:40判断一个字符串是否是对称字符串 例如"abc"不是对称字符串,"aba"、"abba"、"aaa"、"mnanm"是对称字符串。 1、第1个字符与最后一个字符去比较 2、第2个字符与倒数第2个字符去比较 3、第3个字符与倒数第3个字符去比较...分析:
1、第1个字符与最后一个字符去比较
2、第2个字符与倒数第2个字符去比较
3、第3个字符与倒数第3个字符去比较
4、... 比较的次数: length()/2
代码:
import java.util.Scanner; public class StringBufferTestDemo11 { public static void main(String[] args) { Scanner sc=new Scanner(System.in); System.out.println("请输入一个字符串:"); String s=sc.next(); boolean flag=true; char[] chars = s.toCharArray(); for (int i=0,j= chars.length-1;i<=j;i++,j--){ if (chars[i]!=chars[j]){ System.out.println("字符串不对称"); flag=false; break; } } if (flag==true){//注意这里不能写成flag=true,否则的话这句话必执行 System.out.println("字符串是对称的"); } //第二种方法利用StringBuffer的转置性质,如果转置后的字符串与转置前的字符串 //相同则是对称字符串 StringBuffer s3=new StringBuffer(s).reverse(); String s2= s3.toString();//注意这里还要把s3转为字符串否则无法比较字符串内容, //还要用一个String类型变量去接收 if (s==null){ System.out.println("字符串s为空!!"); } else { if (s.equals(s2)) { System.out.println("字符串是对称字符串"); } else { System.out.println("字符串不是对称的"); } }
结果:
-
对称字符串的最大长度
2021-03-09 09:24:33题目:输入一个字符串,输出该字符串中对称的子字符串的最大长度。比如输入字符串“google”,由于该字符串里最长的对称子字符串是“goog”,因此输出4。思路:可能很多人写过判断一个字符串是不是对称函数,这个...题目:输入一个字符串,输出该字符串中对称的子字符串的最大长度。比如输入字符串“google”,由于该字符串里最长的对称子字符串是“goog”,因此输出4。
思路:可能很多人写过判断一个字符串是不是对称函数,这个题目可以看成是该函数的加强版。首先想到的就是遍历,暂且先不考虑效率问题。判断一个字符串是不是对称的函数,可以用这个字函数逐一检查原字符串中所有的子字符串,然后输出长度最大的即可。
怎样判断一个字符串是不是对称的字符串?
-->可以用两个指针分别指向字符串的第一个字符和最后一个字符,判断是否相等,如果不相等直接返回false,如果为真则接着比较下 一对字符。
如何遍历原字符串的所有字串?首先让一个指针从头至尾遍历,对于这个指针的每一个字符,我们再用另一个指针逐一指向它后面的每一个字符即可。
判断字符串是否对称
要判断一个字符串是不是对称的,不是一件很难的事情。我们可以先得到字符串首尾两个字符,判断是不是相等。如果不相等,那该字符串肯定不是对称的。否则我们接着判断里面的两个字符是不是相等,以此类推。基于这个思路,我们不难写出如下代码:
bool IsSymmetrical(char *pBegin , char *pEnd) { if(pBegin == NULL || pEnd == NULL || pBegin > pEnd) return false; while(pBegin < pEnd) { if(*pBegin != *pEnd) return false; pBegin++; pEnd--; } return true; }
要判断一个字符串pString是不是对称的,我们只需要调用IsSymmetrical(pString, &pString[strlen(pString) – 1])就可以了。
解法一:O(n3)的算法
现在我们试着来得到对称子字符串的最大长度。最直观的做法就是得到输入字符串的所有子字符串,并逐个判断是不是对称的。如果一个子字符串是对称的,我们就得到它的长度。这样经过比较,就能得到最长的对称子字符串的长度了。于是,我们可以写出如下代码: // Get the longest length of its all symmetrical substrings // Time needed is O(T^3) int GetLongestSymmetricalLength_1(char* pString) { if(pString == NULL) return 0; int symmeticalLength = 1; char* pFirst = pString; int length = strlen(pString); while(pFirst < &pString[length - 1]) { char* pLast = pFirst + 1; while(pLast <= &pString[length - 1]) { if(IsSymmetrical(pFirst, pLast)) { int newLength = pLast - pFirst + 1; if(newLength > symmeticalLength) symmeticalLength = newLength; } pLast++; } pFirst++; } return symmeticalLength; }
因此解法一实现代码如下:
#include #include using namespace std; /*************************** *判断一个字符串是否对称 ***************************/ bool IsSymmetrical(char *pBegin , char *pEnd) { if(pBegin == NULL || pEnd == NULL || pBegin > pEnd) return false; while(pBegin < pEnd) { if(*pBegin != *pEnd) return false; pBegin++; pEnd--; } return true; } /*************************** *求最大对称字串的长度 ***************************/ int GetLongestSymmerticalLength(char *pString) { if(pString == NULL) return 0; int symmerticalLength = 1; char *pFirst = pString; int length = strlen(pString); while(pFirst < &pString[length - 1]) { char *pLast = pFirst + 1; while(pLast <= &pString[length - 1]) { if(IsSymmetrical(pFirst , pLast)) { int newLength = pLast - pFirst + 1; if(newLength > symmerticalLength) symmerticalLength = newLength; } pLast++; } pFirst++; } return symmerticalLength; } int main() { cout<>yourstring; cout<
我们来分析一下上述方法的时间效率。由于我们需要两重while循环,每重循环需要O(n)的时间。另外,我们在循环中调用了IsSymmetrical,每次调用也需要O(n)的时间。因此整个函数的时间效率是O(n3)。
通常O(n3)不会是一个高效的算法。如果我们仔细分析上述方法的比较过程,我们就能发现其中有很多重复的比较。假设我们需要判断一个子字符串具有aAa的形式(A是aAa的子字符串,可能含有多个字符)。我们先把pFirst指向最前面的字符a,把pLast指向最后面的字符a,由于两个字符相同,我们在IsSymtical函数内部向后移动pFirst,向前移动pLast,以判断A是不是对称的。接下来若干步骤之后,由于A也是输入字符串的一个子字符串,我们需要再一次判断它是不是对称的。也就是说,我们重复多次地在判断A是不是对称的。
造成上述重复比较的根源在于IsSymmetrical的比较是从外向里进行的。在判断aAa是不是对称的时候,我们不知道A是不是对称的,因此需要花费O(n)的时间来判断。下次我们判断A是不是对称的时候,我们仍然需要O(n)的时间。 解法二:O(n2)的算法
如果我们换一种思路,我们从里向外来判断。也就是我们先判断子字符串A是不是对称的。如果A不是对称的,那么向该子字符串两端各延长一个字符得到的字符串肯定不是对称的。如果A对称,那么我们只需要判断A两端延长的一个字符是不是相等的,如果相等,则延长后的字符串是对称的。因此在知道A是否对称之后,只需要O(1)的时间就能知道aAa是不是对称的。
我们可以根据从里向外比较的思路写出如下代码:
#include #include using namespace std; int GetLongestSymmeticalLength(char *pString) { if(pString == NULL) return 0; int symmeticalLength = 1; char *pChar = pString; while(*pChar != '\0') { //substring with odd length(奇数) char *pFirst = pChar - 1; char *pLast = pChar + 1; while(pFirst >= pString && *pLast != '\0' && *pFirst == *pLast) { pFirst--; pLast++; } int newLength = pLast - pFirst - 1; //注意此时是减1 if(newLength > symmeticalLength) symmeticalLength = newLength; //substring with even length(偶数) pFirst = pChar; pLast = pChar + 1; while(pFirst >= pString && *pLast != '\0' && *pFirst == *pLast) { pFirst--; pLast++; } newLength = pLast - pFirst - 1; if(newLength > symmeticalLength) symmeticalLength = newLength; pChar++; } return symmeticalLength; } int main() { cout<>yourstring; cout<
由于子字符串的长度可能是奇数也可能是偶数。长度是奇数的字符串是从只有一个字符的中心向两端延长出来,而长度为偶数的字符串是从一个有两个字符的中心向两端延长出来。因此我们的代码要把这种情况都考虑进去。
在上述代码中,我们从字符串的每个字符串两端开始延长,如果当前的子字符串是对称的,再判断延长之后的字符串是不是对称的。由于总共有O(n)个字符,每个字符可能延长O(n)次,每次延长时只需要O(1)就能判断出是不是对称的,因此整个函数的时间效率是O(n2)。 参考:http://zhedahht.blog.163.com/blog/static/25411174201063105120425/
http://blog.csdn.net/zz198808/article/details/7795132
-
每日一题:字符串系列---判断一个字符串是否是对称字符串 * 例如“abc“不是对称字符串,“aba“、“abba...
2021-03-19 17:12:35判断一个字符串是否是对称字符串 * 例如"abc"不是对称字符串,“aba”、“abba”、“aaa”、"mnanm"是对称字符串 public class Test{ public static void main(String[] args) { System.out.println(isPalindrome... -
Java基础:Java判断一个字符串是否为对称字符串
2022-04-26 16:46:29Java判断一个字符串是否为对称字符串 需求 定义一个方法用于判断一个字符串是否是对称的字符串,并在主方法中测试方法。例如:“abcba”、"上海自来水来自海上"均为对称字符串。 设计思路 首先,从键盘录入一个字符... -
输入一个字符串,可以删除字符串s中的任意字符,剩下的字符串形成对称字符串,且该字符串为最长对称字符串
2019-05-29 20:34:53如:输入google,则找到最长对称字符串为goog;如输入abcda则能找到最长对称字符串为aba。 若最长对称字符串存在多个,则输出多个相同长度的最长对称字符串。 ``` package tech.lejian.test; /** * 找出最长... -
最大对称字符串的算法
2020-09-05 14:03:22题目:输入一个字符串,输出该字符串中对称的子字符串的最大长度。比如输入字符串“google”,由于该字符串里最长的对称子字符串是“goog”,因此输出4。 -
Educoder 第1关:练习-Java字符串之StringBuffer类之对称字符串
2021-06-09 12:36:04本关任务:接收给定的字符串,判断是否为对称字符串。 对称字符串举例:abcdcba。 importjava.util.Scanner; publicclassStrTest{ publicstaticvoidmain(String[]args){ //请在Begin-End间编写代码 /******... -
Java 键盘录入一个字符串:判断字符串是否为对称字符串
2021-07-28 21:10:28键盘录入一个字符串:判断字符串是否为对称字符串 1.方式一 分析: 1)定义一个功能完成 compare(String str)—返回值 boolean 1.1) 获取字符串长度 str.length() 1.2) 创建一个字符数组:动态初始化 char[] charArray... -
c++对称字符串
2022-03-08 10:47:37示例代码: #include<iostream> using namespace std; #include<string> int main() { int n; cin >> n; if (n == 1) { cout << 'A';... //加上行数对应的大.. -
PHP从字符串中找出最长的对称字符串
2021-08-18 17:18:49设计函数getMaxStr,找出一个字符串中的最长对称字符串,如slkabcdeggedcbaiokabccbanh最长字符串是‘bcdeggedcb’ 分析一下我的思路: 1.从字符串下标0开始,分别和字符串从右到左的顺序进行比较,直到自己和自己... -
判断一个字符串是否是对称字符串(StringBuilder的reverse功能)
2021-03-16 11:32:41例如"abc"不是对称字符串,"aba"、"abba"、"aaa"、"mnanm"是对称字符串 分析: 1.键盘录入一个字符串 2.写方法判断反转后VS反转前字符串(相同则为对称) String--StringBuilder--sb.reverse--to -
判断一个字符串是否是对称字符串
2019-08-26 15:41:36判断一个字符串是否是对称字符串 例如"abc"不是对称字符串,“aba”、“abba”、“aaa”、"mnanm"是对称字符串 package com.igeek_03; import java.util.Scanner; /** * @ClassName: StringBuilderTest4 * @... -
找出字符串中最长的对称字符串
2019-10-04 21:47:38截取一个字符串 int length = substr.length(); // 判断是否对称 int middle = 0 ; if (substr.length() % 2 == 0 ) { middle = substr.length() / 2 ; } else { middle = substr.length... -
java判断一个字符串是否对称
2018-04-27 21:56:40自己编的java判断一个字符串是否对称的,忘指导。判断一个字符串是否是对称字符串(方法改进) (一个一个比较) 例如"abc"不是对称字符串,"aba"、"abba"、"aaa"、"mnanm"是对称字符串 -
对称字符串问题(详细解答!)
2018-03-25 16:34:54对称字符串问题(详细解答!) 本题原题目来自于蓝桥杯的“密码脱落”问题,想见原题请自行搜索。 在此概括一下题目大意:给出一个字符串,求最多添加多少个字符,能让该字符串变为对称字符串。 解题主要思路... -
判断一个字符串是否为对称字符串
2019-07-30 21:33:23设计一个方法,判断一个字符串是否为对称字符串,比如“abcba”,“abba”,要求至少采用两种方式实现。 public class Test3 { public static void main(String[] args) { /* * 3,设计一个方法,判断一个字符... -
键盘录入一个字符串,判断是否是对称字符串
2021-03-26 17:35:36* 键盘录入一个字符串,判断是否是对称字符串 * 对称字符串:123321 * 非对称字符串:123123 */ public class Demo8 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); ... -
中心对称字符串问题.pdf
2021-10-08 20:26:31中心对称字符串问题.pdf -
Js递归判断回文字符串(对称字符串)
2020-05-14 15:05:05Js递归判断回文字符串(对称字符串) 比如:aba,对称,输出1;abaa,不对称,输出0。 // An highlighted block let str = "cbdcbc"; function isReserveSame(str) { if(str[0]==str[str.length-1]){//头尾字符相同 ... -
StringBuffer与String比较练习3:判断一个字符串是否是对称字符串!
2019-04-25 20:36:57例如:"abc"不是对称字符串,“aba”,“abba”,“aaa”,"mnanm"是对称字符串 分析: 判断一个字符串是否是对称的字符串,我只需要把 第一个和最后一个比较 第二个和倒出第二个比较 ... -
C语言判断是否是对称字符串(用指针实现)
2020-03-17 00:30:52从键盘输入一个字符串,判断是否为对称字符串,若是输出“YES”,若不是输出“NO” #include<stdio.h> #include<string.h> int main() { char a[10],*p,*q,i;//定以变量及指针 gets(a);//输入字符... -
判断一个字符串是否是对称字符串(二)
2018-04-10 18:22:13不是对称字符串, "aba"、"abba"、"aaa"、"mnanm"是对称字符串 用API查看StringBuffer类里的reverse()方法和toString()方法功能在if里面判断连个字符串内容是否相等... -
java定义方法判断字符串是否对称- 例如:“abcba“、“上海自来水来自海上“均为对称字符串。
2020-11-26 19:37:09例如:“abcba”、"上海自来水来自海上"均为对称字符串。 public class Test { public static void main(String[] args) { boolean flag1 = flagRever("abccba"); boolean flag2 = flagRever("上海自来水来自...