一、判断字符串中字符是否重复
public class RepeatString {
public static void main(String[] args) {
String str = "apple";
System.out.println(isRepeatString(str));
}
public static boolean isRepeatString(String str) {
if(str.isEmpty()) {
return true;
}
int[] charNum = new int[128];
for(int i = 0;i<str.length();i++) {
char ch = str.charAt(i);
if(charNum[ch] > 0) {
return false;
}else {
charNum[ch]++;
}
}
return true;
}
}
二、翻转字符串
public class ReverseString {
public static void main(String[] args) {
String str = "Happy New Year";
System.out.println(reverseString_1(str));
System.out.println(reverseString_2(str));
}
public static String reverseString_1(String str) {
int len = str.length();
char[] reverseStr = new char[len];
for(int i = 0;i < len;i++) {
reverseStr[i] = str.charAt(len-1-i);
}
return new String(reverseStr);
}
public static String reverseString_2(String str) {
StringBuilder sb = new StringBuilder(str);
return sb.reverse().toString();
}
}
三、变形词问题
public class IsSameString {
public static void main(String[] args) {
String strA = "abcde";
String strB = "edcba";
System.out.println(isSame_1(strA,strB));
System.out.println(isSame_2(strA,strB));
}
public static boolean isSame_1(String strA, String strB) {
int lenA = strA.length();
int lenB = strB.length();
if(lenA!=lenB)
return false;
char[] chArrayA = strA.toCharArray();
char[] chArrayB = strB.toCharArray();
Arrays.sort(chArrayA);
Arrays.sort(chArrayB);
return Arrays.equals(chArrayA, chArrayB);
}
public static boolean isSame_2(String strA, String strB) {
int[] charNum = new int[128];
char ch;
for(int i = 0;i<strA.length();i++) {
ch = strA.charAt(i);
charNum[ch]++;
}
for(int i = 0;i<strB.length();i++) {
ch = strB.charAt(i);
charNum[ch]--;
if(charNum[ch]<0)
return false;
}
for(int i = 0;i<charNum.length;i++) {
if(charNum[i]!=0)
return false;
}
return true;
}
}
四、压缩字符串
public class ZipString {
public static void main(String[] args) {
String str = "abbeeddfffgggg";
System.out.println(zipStr(str));
}
public static String zipStr(String str) {
int count = 0;
char last = 0;
StringBuilder sb = new StringBuilder();
for(int i = 0;i<str.length();i++) {
char ch = str.charAt(i);
if(sb.length() == 0) {
sb.append(ch);
count++;
}else {
if(last == ch) {
count++;
}else {
sb.append(count).append(ch);
count=1;
}
}
last = ch;
}
if(count >= 1) {
sb.append(count);
}
if(str.length() <= sb.length())
return str;
return sb.toString();
}
}
五、判断字符串的字符集是否相同
public class HasSameChars {
public static void main(String[] args) {
String strA = "ava";
String strB = "avg";
System.out.println(hasSame_1(strA,strB));
System.out.println(hasSame_2(strA,strB));
}
public static boolean hasSame_1(String strA, String strB) {
int[] charNum = new int[128];
char ch;
for(int i = 0;i<strA.length();i++) {
ch = strA.charAt(i);
if(charNum[ch]==0)
charNum[ch] = 1;
}
for(int i = 0;i<strB.length();i++) {
ch = strB.charAt(i);
if(charNum[ch] == 0)
return false;
charNum[ch] = 0;
}
for(int i = 0;i<strA.length();i++) {
ch = strA.charAt(i);
if(charNum[ch] == 1)
return false;
}
return true;
}
public static boolean hasSame_2(String strA, String strB) {
Map<Character,Integer> mapA = new HashMap<Character,Integer>();
Map<Character,Integer> mapB = new HashMap<Character,Integer>();
char ch;
for(int i = 0;i<strA.length();i++) {
ch = strA.charAt(i);
if(mapA.get(ch)==null)
mapA.put(ch, 1);
}
for(int i = 0;i<strB.length();i++) {
ch = strB.charAt(i);
if(mapB.containsKey(ch))continue;
if(mapB.get(ch)==null)
mapB.put(ch, 1);
}
if(mapA.size()!=mapB.size())
return false;
if(!mapA.keySet().equals(mapB.keySet()))
return false;
return true;
}
}
六、旋转词
public class IsRotate {
public static void main(String[] args) {
String strA = "adefa";
String strB = "defaa";
System.out.println(isRotate(strA,strB));
}
public static boolean isRotate(String strA, String strB) {
return (strB+strB).contains(strA);
}
}
七、将字符串中按字符翻转
public class WordReverse {
public static void main(String[] args) {
String str = "Thank you";
System.out.println(reverseWord(str));
}
public static String reverseWord(String str) {
String strWord = reverseString(str);
String[] words = strWord.split("\\s");
StringBuilder sb = new StringBuilder();
for(int i = 0;i<words.length;i++) {
sb.append(reverseString(words[i])+" ");
System.out.println(words[i]);
}
return sb.deleteCharAt(sb.length()-1).toString();
}
public static String reverseString(String str) {
StringBuilder sb = new StringBuilder(str);
return sb.reverse().toString();
}
}
八、去掉字符串中连续出现的k次0
public class RemoveZero {
public static void main(String[] args) {
String str="100100001110000";
int k = 3;
System.out.println(removeZero(str,4));
}
public static String removeZero(String str,int k) {
StringBuilder sb = new StringBuilder();
int count = 0;
char ch;
for(int i = 0;i<str.length();i++) {
ch = str.charAt(i);
if(ch == '0') {
count++;
}else {
for(int j = 0;j<count%k;j++) {
sb.append('0');
}
sb.append(ch);
count = 0;
}
}
if(count!=0) {
for(int m = 0;m<count%k;m++) {
sb.append('0');
}
}
return sb.toString();
}
}