在这里插入图片描述

回文检测是经典的字符串算法问题。基于 Kotlin Multiplatform(kmp)与 openharmony,我们实现了一个轻量级的回文检测工具:输入字符串,即可检测是否为回文,并提供反转、字符清理等功能,通过 ArkTS 面板进行可视化呈现。本文包含简洁的 Kotlin 算法实现、JavaScript 桥接与 ArkTS UI 代码。

Kotlin 回文检测引擎

@JsExport
fun palindromeChecker(inputData: String): String {
    val sanitized = inputData.trim()
    if (sanitized.isEmpty()) {
        return "❌ 输入为空,请输入需要检测的字符串"
    }
    
    val inputs = sanitized.split("|", ";", "\n")
        .map { it.trim() }
        .filter { it.isNotEmpty() }
    
    if (inputs.isEmpty()) {
        return "❌ 未找到有效的字符串,请检查输入格式"
    }
    
    val builder = StringBuilder()
    builder.appendLine("🔄 回文检测分析报告")
    builder.appendLine("检测字符串数量: ${inputs.size}")
    builder.appendLine("----- 检测结果 -----")
    
    inputs.forEachIndexed { index, text ->
        val cleaned = text.lowercase().filter { it.isLetterOrDigit() }
        val isPalindrome = cleaned == cleaned.reversed()
        val reversed = text.reversed()
        val charCount = text.length
        val cleanedLength = cleaned.length
        
        builder.appendLine("${index + 1}. 原文: \"$text\"")
        builder.appendLine("   字符数: $charCount (清理后: $cleanedLength)")
        builder.appendLine("   反转: \"$reversed\"")
        builder.appendLine("   是否回文: ${if (isPalindrome) "✅ 是" else "❌ 否"}")
        if (cleaned.isNotEmpty()) {
            builder.appendLine("   清理后: \"$cleaned\"")
        }
    }
    
    val palindromeCount = inputs.count { text ->
        val cleaned = text.lowercase().filter { it.isLetterOrDigit() }
        cleaned.isNotEmpty() && cleaned == cleaned.reversed()
    }
    
    builder.appendLine("统计: 共 ${inputs.size} 个字符串,其中 $palindromeCount 个是回文")
    
    return builder.toString().trim()
}

该 Kotlin 函数接收字符串(多个字符串用 | 分隔),对每个字符串进行回文检测:使用 lowercase() 转为小写,filter { it.isLetterOrDigit() } 清理非字母数字字符,然后比较原字符串与反转后的字符串是否相等。同时提供反转和清理功能。结果以文本形式返回,方便在 ArkTS 中展示。通过 @JsExport 标注,该函数可编译到 JavaScript,供 openharmony 端调用。

JavaScript 桥接函数

import { palindromeChecker } from './hellokjs.js';

export function runPalindromeCheck(payload) {
  const normalized = typeof payload === 'string' ? payload.trim() : '';
  if (!normalized) {
    return '⚠️ 输入为空,请提供字符串';
  }
  try {
    const report = palindromeChecker(normalized);
    console.info('[palindrome] success', report.split('\n')[0]);
    return report;
  } catch (error) {
    console.error('[palindrome] failed', error);
    return `❌ 执行失败: ${error?.message ?? error}`;
  }
}

桥接层负责输入校验和异常捕获,调用 Kotlin 引擎并返回结果。

ArkTS 回文检测面板

import { palindromeChecker } from './hellokjs';

@Component
struct PalindromePanel {
  @State inputData: string = 'level|hello|A man a plan a canal Panama|racecar';
  @State result: string = '';
  @State loading: boolean = false;

  execute() {
    this.loading = true;
    setTimeout(() => {
      this.result = palindromeChecker(this.inputData);
      this.loading = false;
    }, 100);
  }
}

ArkTS UI 提供文本输入框、检测按钮和结果展示区域,用户可以输入字符串并查看回文检测结果。

算法说明

本实现采用简单的字符串反转比较算法:

  • 回文检测:将字符串转为小写并清理非字母数字字符后,比较原字符串与反转字符串是否相等,时间复杂度为 O(n)
  • 字符串反转:使用 Kotlin 标准库的 reversed() 方法
  • 字符清理:使用 filter { it.isLetterOrDigit() } 过滤,忽略大小写和标点符号

代码简洁高效,适合快速回文检测场景。

应用场景

该工具适用于字符串算法学习、文本处理验证等场景,例如:编程练习、字符串算法演示、文本特征分析等。通过 kmp 与 openharmony 的协同,可以在终端设备上快速完成回文检测,无需依赖大型文本处理工具。***

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐